package br.ucb.cesbdao.persistencia.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import br.ucb.cesbdao.beans.Trabalhador;
import br.ucb.cesbdao.beans.Grupo;
import br.ucb.cesbdao.persistencia.AbstractConnectionDAO;
import br.ucb.cesbdao.servicos.DateUtil;
import br.ucb.cesbdao.servicos.TimeUtil;
import br.ucb.cesbdao.utilBeans.TrabalhadorUtil;

public class TrabalhadorPorGrupoDAO extends AbstractConnectionDAO{
	
	public TrabalhadorPorGrupoDAO(Connection conexao) {
		super(conexao);
	}

	public  int addTrabalhador_grupo(int chavePessoa, int idGrupo)throws SQLException, ClassNotFoundException{
		String sql="INSERT INTO daotrabalhador_grupo(chavePessoa, idGrupo) values (?,?)";
		PreparedStatement instrucao= getConexao().prepareStatement(sql);
		instrucao.setInt(1, chavePessoa);
		instrucao.setInt(2, idGrupo);
		int retorno = instrucao.executeUpdate(); 
		instrucao.close();
		return retorno;
	}
	
	public  ArrayList<Trabalhador> consultaTrabalhador_grupoByGrupo(Integer id) throws SQLException,ClassNotFoundException{
		String sqlConsulta = "SELECT * FROM daotrabalhador_grupo TG, daoTrabalhador T, daoPessoa P WHERE T.chavePessoa = TG.chavePessoa  AND P.chavePessoa = T.chavePessoa AND P.chavePessoa > 0 AND TG.idGrupo = ";
		PreparedStatement instrucao=getConexao().prepareStatement(sqlConsulta);
		sqlConsulta=sqlConsulta+id;
		ArrayList<Trabalhador> atendentes = new ArrayList<Trabalhador>();
		ResultSet rs =  instrucao.executeQuery(sqlConsulta);
		while(rs.next())
			atendentes.add(TrabalhadorUtil.preencheTrabalhador(rs));
		rs.close();
		instrucao.close();
		return atendentes;
	}
	
	public  ArrayList<Grupo> consultaTrabalhador_grupoByTrabalhador_id(Integer id) throws SQLException,ClassNotFoundException{
		String sqlConsulta= "SELECT * FROM daotrabalhador_grupo TG, daoGrupo G WHERE G.idGrupo = TG.idGrupo AND chavePessoa = ";
		PreparedStatement instrucao=getConexao().prepareStatement(sqlConsulta);
		ResultSet rs =  instrucao.executeQuery(sqlConsulta+id);
		ArrayList<Grupo> grupos = new ArrayList<Grupo>();
		while(rs.next())
			grupos.add(new Grupo(rs.getInt("idGrupo"),
					rs.getInt("numeroGrupo"),
					rs.getString("nomeGrupo"),
					rs.getInt("diaSemana"),
					rs.getString("horario"),
					rs.getString("status").charAt(0),
					rs.getString("horarioFinal")));
		rs.close();
		instrucao.close();
		return grupos;
	}
	
	public  boolean consultaTrabalhador_grupoAmbos(int chavePessoa, int idGrupo) throws SQLException,ClassNotFoundException{
		String sqlConsulta= "SELECT * FROM daotrabalhador_grupo WHERE idGrupo = "+idGrupo+" AND chavePessoa = "+chavePessoa;
		PreparedStatement instrucao=getConexao().prepareStatement(sqlConsulta);
		ResultSet rs = instrucao.executeQuery(sqlConsulta);
		boolean retorno = rs.next();
		rs.close();
		instrucao.close();
		return retorno;
	}

	
	public  int excluiTrabalhador_grupo(int chavePessoa, int idGrupo) throws  SQLException, ClassNotFoundException{
		String sql="DELETE FROM daotrabalhador_grupo WHERE chavePessoa = "+chavePessoa+" AND idGrupo = "+idGrupo;
		PreparedStatement instrucao=getConexao().prepareStatement(sql);
		int sucesso = instrucao.executeUpdate();
		instrucao.close();
		return sucesso;
	}
	
	
	public  int alteraGrupo (int oldChavePessoa, int oldIdGrupo, int newChavePessoa, int newIdGrupo) throws SQLException, ClassNotFoundException{
		int retorno;
		retorno = excluiTrabalhador_grupo(oldChavePessoa, oldIdGrupo);
		if(retorno != 0)
		   retorno = addTrabalhador_grupo(newChavePessoa, newIdGrupo);
		return retorno;
	}

	public  ArrayList<Trabalhador> consultaTrabalhadorByHorarioGrupo() throws SQLException, ClassNotFoundException {
		String sqlConsulta = "SELECT * FROM daotrabalhador_grupo TG, daoTrabalhador T, daoPessoa P, daogrupo G WHERE T.chavePessoa = TG.chavePessoa AND P.chavePessoa = T.chavePessoa AND TG.idgrupo = G.idgrupo AND P.chavePessoa > 0 AND('"+TimeUtil.getHoraSys()+":00"+"' >= G.horario  OR  '"+TimeUtil.getHoraSys()+":00"+"' <= G.horarioFinal) AND G.diaSemana = '"+DateUtil.getDiaSemanaAtual()+"';";
		PreparedStatement instrucao=getConexao().prepareStatement(sqlConsulta);
		ArrayList<Trabalhador> atendentes = new ArrayList<Trabalhador>();
		ResultSet rs =  instrucao.executeQuery(sqlConsulta);
		while(rs.next())
			atendentes.add(TrabalhadorUtil.preencheTrabalhador(rs));
		rs.close();
		instrucao.close();
		return atendentes;
	}
	public  ArrayList<Trabalhador> consultaTrabalhadorByDiaGrupo(int dia) throws SQLException, ClassNotFoundException {
		String sqlConsulta = "SELECT * FROM daotrabalhador_grupo TG, daoTrabalhador T, daoPessoa P, daogrupo G WHERE T.chavePessoa = TG.chavePessoa AND TG.idgrupo = G.idgrupo  AND P.chavePessoa = T.chavePessoa AND P.chavePessoa > 0 AND G.diaSemana = '"+dia+"';";
		PreparedStatement instrucao=getConexao().prepareStatement(sqlConsulta);
		ArrayList<Trabalhador> atendentes = new ArrayList<Trabalhador>();
		ResultSet rs =  instrucao.executeQuery(sqlConsulta);
		while(rs.next())
			atendentes.add(TrabalhadorUtil.preencheTrabalhador(rs));
		rs.close();
		instrucao.close();
		return atendentes;
	}
}
